package remote_work.util;

import java.io.File;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

/**
 * 类加载器，在服务器启动的时候加载所有的服务类
 * TODO:扫描项目中所有包中的class文件，根据对应注解加载服务类
 * 
 * @author LiuPing
 *
 * 2018年3月19日
 */
public final class MyClassLoader {
	
	private String rootPath = System.getProperty("user.dir");
	private String classPath = MyProperties.getInstance().getProperty("classpath");
	private String clsPackage = MyProperties.getInstance().getProperty("clspackage");
	
	private static Map<String, String> methodContainer = new HashMap<>();

	public void loadClasses() throws Exception {
		File dir = new File(rootPath+classPath);
		if (dir.isDirectory()) {
			File[] files = dir.listFiles();
			if (files.length > 0) {
				for (File file : files) {
					String className = file.getName();
					String qualifiedName = clsPackage+className.substring(0, className.indexOf("."));
					Class<?> cls = Class.forName(qualifiedName);
					// TODO:对类增加注解判断，符合条件的再执行
					Method[] methods = cls.getDeclaredMethods();
					// TODO:这样存的话类名会存在大量冗余
					for (Method method : methods) {
						String key = method.getName();
						System.out.println("服务方法名"+key);
						if (methodContainer.containsKey(key)) {
							throw new Exception("服务方法名重复！！！");
						} else {
							methodContainer.put(key, qualifiedName);
						}
					}
				}
			}
		}
	}
	
	public static String getQualifiedClassName(String key) {
		return methodContainer.get(key);
	}
}
